/*************************************************
  * 描述：日期控件日历窗体
  *
  * File：cxicalendarwidget.h
  * Author：dongyao@mozihealthcare.cn
  * Date：2025/10/15
  * Update：
  * ************************************************/

#ifndef CXICALENDARWIDGET_H
#define CXICALENDARWIDGET_H


#include <QCalendarWidget>
class QPushButton;
class QLabel;
class YearMonthWidget;

class CxiCalendarWidget : public QCalendarWidget
{
	Q_OBJECT
public:
	enum DateType
	{
		Month = 0,
		Year
	};

	CxiCalendarWidget(QWidget* parent);
	~CxiCalendarWidget();

protected:
	/**
	 * @brief 重写绘制单元格
	 * @param painter
	 * @param rect
	 * @param date
	 */
	void paintCell(QPainter* painter, const QRect& rect, const QDate& date) const;
	/**
	 * @brief 显示
	 * @param event
	 */
	virtual void hideEvent(QHideEvent* event);

private:
	// 初始化
	void initCalendar();
	// 初始化顶部
	void initTopWidget();
	// 初始化底部
	void initBottomWidget();
	// 设置时间
	void setDateLabelTimeText(int year, int month);
	// 设置按钮样式
	void setTopButtonStyle();
	// 设置按钮样式
	void setButtonStyle(QPushButton* btn, const int width, const int height, const QStringList& icons);
	// 显示年、月列表
	void showYearMonthList(DateType type);

private slots:
	// 按钮点击
	void onbtnClicked();
	// 更新时间
	void onUpdateHMSmmTime(const QDate& date);
	// 年、月列表点击
	void onYearMonthButtonIsclicked(int type, int newValue);

signals:
	// 设置时间
	void signalSetCalendarTime(const QDateTime& data);
	// 清空时间
	void signalClearDateTime();

private:
	QPushButton* m_leftYearBtn;
	QPushButton* m_leftMonthBtn;
	//    QLabel* m_dateLabel;
	QPushButton* m_monthLabelBtn;
	QPushButton* m_yearLabelBtn;

	QPushButton* m_rightYearBtn;
	QPushButton* m_rightMonthBtn;
	int m_iFontSize;
	QPushButton* m_todayBtn;
	YearMonthWidget* m_yearMonthWidget;
	QWidget* m_topWidget;
};


#endif//CXICALENDARWIDGET_H
